bitkeeper revision 1.1713.3.1 (42b28e04xelbNlMIz5vWQQ5_M71w0A)
authorcl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Fri, 17 Jun 2005 08:47:00 +0000 (08:47 +0000)
committercl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Fri, 17 Jun 2005 08:47:00 +0000 (08:47 +0000)
privcmd.h, privcmd.c:
  Add IOCTL_PRIVCMD_INITDOMAIN_STORE to setup dom0 xenstore page
  and event channel.
From: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
linux-2.6.11-xen-sparse/drivers/xen/privcmd/privcmd.c
linux-2.6.11-xen-sparse/include/asm-xen/linux-public/privcmd.h

index 2f9d5fde38de4fb4ee003fcb9be15536146a5ba8..9eea1835b5c5bfa2eec7afedf6fbbb6668aea2bd 100644 (file)
@@ -196,6 +196,36 @@ static int privcmd_ioctl(struct inode *inode, struct file *file,
     }
     break;
 
+    case IOCTL_PRIVCMD_INITDOMAIN_STORE:
+    {
+        extern int do_xenbus_probe(void*);
+
+        if (xen_start_info.store_evtchn != 0) {
+            ret = -EINVAL;
+            break;
+        }
+
+        /* Allocate page. */
+        xen_start_info.store_page = get_zeroed_page(GFP_KERNEL);
+        if (!xen_start_info.store_page) {
+            ret = -ENOMEM;
+            break;
+        }
+
+        /* We don't refcnt properly, so set reserved on page.
+         * (this allocation is permanent) */
+        SetPageReserved(virt_to_page(xen_start_info.store_page));
+
+        /* Initial connect. Setup channel and page. */
+        xen_start_info.store_evtchn = data;
+        ret = pfn_to_mfn(virt_to_phys((void *)xen_start_info.store_page) >>
+                         PAGE_SHIFT);
+
+        /* We'll return then this will wait for daemon to answer */
+        // kthread_run(do_xenbus_probe, NULL, "xenbus_probe");
+    }
+    break;
+
     default:
         ret = -EINVAL;
         break;
index 9142c6b35d2dfd43104ddb22b74beac80edeecb3..51d1ce5acfa8e629d50a25f674fc1ac7673cc605 100644 (file)
@@ -84,5 +84,7 @@ typedef struct privcmd_blkmsg
     _IOC(_IOC_NONE, 'P', 3, sizeof(privcmd_mmapbatch_t))
 #define IOCTL_PRIVCMD_GET_MACH2PHYS_START_MFN \
     _IOC(_IOC_READ, 'P', 4, sizeof(unsigned long))
+#define IOCTL_PRIVCMD_INITDOMAIN_STORE \
+    _IOC(_IOC_READ, 'P', 5, 0)
 
 #endif /* __PRIVCMD_H__ */